Affichage des articles dont le libellé est Labo et Atelier. Afficher tous les articles
Affichage des articles dont le libellé est Labo et Atelier. Afficher tous les articles

lundi 19 avril 2021

Acheter un multimètre


 

Acheter un multimètre


Lorsque l'on bricole en électronique, il est souvent nécessaire de faire l'acquisition d'un multimètre, qui permettra de mesurer tensions, courants, résistances, condensateurs, etc.

La photo ci-dessus est celle d'un METRIX MX220, un des premiers multimètres électroniques. Il nécessite pas moins de 8 piles AA pour fonctionner. Le mien, qui a plus de 40 ans, fonctionne encore !

1. Quel multimètre pour quel usage ?

Le premier critère de choix est le nombre de fonctions nécessaires :

  • mesure de tensions, courants
  • mesure de résistances, condensateurs, inductances
  • mesure de fréquence, rapport cyclique
  • mesure de température 
  • test de diodes, transistors
  • etc.

Si la majeure partie des multimètres possèdent les principales fonctions de base, peu de modèles savent mesurer par exemple des inductances, ou une fréquence.

Mais cela vaut-il la peine d'investir dans un multimètre très complet juste pour bénéficier d'une fonction qui ne servira probablement jamais ou très peu ?

Également, certains multimètres possèdent un calibre µA. Cette fonction sera utile uniquement pour mesurer des courants extrêmement faibles, par exemple la consommation d'un microcontrôleur en veille profonde.

Beaucoup de multimètres possèdent une fonction de test de continuité, qui émet un bip si la continuité est correcte. Indispensable !

Ce testeur, très bon marché (10€), est capable de tester une foule de composants (y compris condensateurs, inductances, transistors, MOSFETs), avec une précision remarquable :

Testeur GM328

J'en parle ici :

https://riton-duino.blogspot.com/2019/12/testeur-de-composants-le-gm328.html 

Ne vaut-il pas mieux en faire l'acquisition, et en parallèle posséder un multimètre de base ? je dirais oui, sans hésitation.

2. La précision

Tout d'abord il ne faut pas confondre précision et résolution.

La résolution d'un multimètre 2000 points est de +/-1 point. Sur le calibre 2V, ce point vaut 2V/2000 = 0.001V.

La précision représente l'écart observé entre la valeur réelle et la valeur mesurée. La précision dépend principalement de la qualité des composants employés. Sur le calibre 2V, une précision de 0.5% implique une erreur possible de 2V*0.5/100 = 0.01V. Comme on le voit, c'est une valeur dix fois supérieure à celle de la résolution.

La précision nécessaire dépend de ce que l'on souhaite mesurer. A quoi bon investir dans un multimètre ayant une précision diabolique si l'on veut simplement vérifier l'alimentation 5V d'un ARDUINO, ou la présence d'un niveau haut ou bas sur une de ses sorties ?

Un multimètre 2000 points suffira dans la majeure partie des cas.

Un multimètre ayant une résolution de 2000 points a souvent une précision de 0.5%, mais cela peut aller bien au delà, jusqu'à 3%. Il convient de vérifier ses caractéristiques.

Un modèle plus précis (6000, 10000, 20000 points ou plus) ne sera utile que dans certains cas particuliers :

  • calibration d'un convertisseur A/N 12bits ou plus
  • tri de résistances de précision
  • etc.

La précision d'un multimètre varie dans le temps. Dans l'industrie, tous les instruments de mesure sont vérifiés et éventuellement calibrés tous les ans. Certaines boutiques professionnelles proposent ce service.

3. Multimètre automatique

Lorsque l'on désire faire une mesure on choisit tout d'abord la grandeur à mesurer (tension, courant, etc.) et ensuite le calibre (200mV, 2V, 20V, etc.).

Un modèle automatique vous épargnera l'effort de choisir le calibre. Seule la grandeur à mesurer (V, A, Ω, etc.) doit être choisie. Ensuite le multimètre choisira lui-même le calibre adapté, en affichant l'unité lors de la mesure (V, mV, µV, A, mA, Ω, KΩ, MΩ, etc.)

ANENG AN870 (25€)

Le sélecteur de fonction d'un multimètre manuel est nettement moins confortable pour un débutant :

ANENG AN9205A (6€)

L'ANENG AN8008 est un excellent modèle 10000 points automatique :

ANENG AN8008 (15€)

Certains électroniciens "à l'ancienne" préfèrent les multimètres manuels, car ils ont l'impression de tout maîtriser. Personnellement je préfère les modèles automatiques. Il faut savoir évoluer avec son temps, et faire confiance au matériel. D'ailleurs, aucune marque de matériel professionnel ne propose de multimètres manuels.

4. La marque

Dans les grandes surfaces de bricolage on trouve des multimètres qui semblent bon marché. Mais il faut savoir qu'ils sont fabriqués en Chine, que la marge des grandes surfaces est élevée, et que les revendeurs chinois comme AliExpress vous proposeront des appareils au rapport qualité prix nettement supérieur :

https://aneng.fr.aliexpress.com/store/919484?spm=a2g0o.detail.1000007.1.72873063Tz4aF6

4.1. Les appareils professionnels

FLUKE 117

Certains seront certainement tentés par un multimètre de marque (FLUKE, KEYSIGHT, METRIX, etc.), mais ce n'est pas forcément justifié. Il faut savoir cependant que certains modèles sont garantis à vie. Ces fabricants proposent également des appareils étanches IP67.

Un multimètre de base de ces marques coûte au minimum 100€. Certes, la qualité de fabrication sera au rendez-vous, mais n'est-ce pas trop dépenser pour un appareil qui passera sa vie à l'abri, bien au chaud sur un bureau ?

Attention : certains multimètres de grandes marques ne proposent même pas la fonction ampèremètre (KEYSIGHT U1231A par exemple).

4.2. Les appareils intermédiaires

Certaines marques européennes, VOLTCRAFT par exemple, proposent des modèles très performants pour un prix plus raisonnable, à partir de 25€ :

VOLTCRAFT VC130-1 (manuel)

Cela ne les empêche pas de proposer des modèles plus haut de gamme. Un VOLTCRAFT VC870 (40000 points) coûte aux alentour de 180€ :

VOLTCRAFT VC870 (automatique)

4.3. Les appareils chinois

N'écoutez surtout pas les gens qui affirment que les multimètres chinois sont de mauvaise qualité.

Je possède depuis plusieurs années un ANENG AN870, 20000 points, payé 25€. Je l'ai acheté pas curiosité, pour évaluer la qualité des multimètres chinois. Depuis il est devenu mon multimètre préféré, et j'en suis très satisfait. Il n'a pas grand chose à envier à mon VoltCraft VC870 40000 points, sept fois plus cher.

Son seul défaut est mécanique, son support arrière ne maintient pas le multimètre incliné de manière correcte.

ANENG AN870 (25€)

4.4. Les appareils à éviter

Je déconseille la marque VELLEMAN, très peu fiable.

5. Quelques conseils

5.1. Bornes d'entrée

Généralement un multimètre possède 3 ou 4 bornes d'entrée, le plus souvent :

  • COM
  • V, Ω
  • A
  • mA, µA

Attention : les bornes de mesure d'intensité A et mA sont protégées par des fusibles. Celui de la borne mA est généralement un modèle 500mA ou 250mA. Si l'on veut mesurer un courant, il vaut mieux commencer par une mesure sur la borne A, et ensuite passer sur la borne mA si le courant est supportable par cette entrée.

L'erreur la plus courante, à ne pas commettre, est de mesurer une tension d'alimentation, en ayant laissé le cordon rouge sur la borne mA. C'est fatal.

Si la mesure de courant ne fonctionne plus, ne pas jeter le multimètre, changer simplement le fusible. Pour cela il faut le démonter :

On ne remplace surtout pas un fusible par un morceau de fil ! cela pourrait conduire à la destruction de l'électronique du multimètre en cas de surintensité.

Un conseil : il est préférable de connaître dès l'achat le calibre du fusible mA, quitte à démonter l'appareil. Acheter des fusibles de rechange est une sage précaution.

5.2. Mesurer des µA

Lorsque l'on mesure des courants très faibles, la résistance interne du multimètre sur le calibre µA est élevée. Cela peut empêcher par exemple un microcontrôleur de démarrer, car le multimètre va limiter le courant, et faire chuter la tension.

Si l'on envisage de mesurer la consommation d'un microcontrôleur en mode veille profonde, il vaut mieux placer le commutateur sur le calibre mA, attendre que le microcontrôleur soit en veille, et basculer ensuite sur le calibre µA.

Par exemple, avec un ANENG AN870, le shunt du calibre mA est de 1Ω, celui du calibre µA est de 100Ω. Si l'on mesure la consommation d'un ARDUINO PRO MINI 3.3V, au démarrage celle-ci sera de 6mA. Si l'on a retiré la LED POWER et le régulateur 3.3V de la carte la consommation typique sera de 1.5µA en mode veille.

Sur le calibre µA la chute de tension sur l'alimentation 3.3V serait de 6mA x 100Ω = 0.6V. Il reste donc 2.7V, et cette tension peut être insuffisante pour démarrer.

Sur le calibre mA la chute de tension sur l'alimentation 3.3V serait de 6mA x 1Ω = 6mV. Cette chute de tension très faible ne posera aucun problème pour démarrer.
Après le démarrage sur le calibre mA, si la mise en veille du
microcontrôleur est activée, on peut basculer sur le calibre µA, la chute de tension sur l'alimentation 3.3V sera de 1.5µA x 100Ω = 0.15mV, ce qui n'empêchera pas le microcontrôleur de fonctionner. Par contre en sortie de mode veille, la consommation remontera à 6mA, et si le multimètre est laissé sur le calibre µA, le microcontrôleur cessera de fonctionner.

5.3. Cordons de mesure maison

Ne pas hésiter à fabriquer ses propres cordons de mesure.
Ces cordons sont équipés de fiches bananes 4mm et de grip-fils miniatures, qui permettent d'aller mesurer une tension sur une patte de composant ou une broche de connecteur. Les fils sont souples (isolant silicone) :

5.4. Ampèremètre USB

Un ampèremètre USB permet de mesurer la tension USB et surtout le courant consommé par une carte ARDUINO. Certains ont une résolution de 10µA, d'autres offrent une liaison BlueTooth.

5.5. Mesurer des températures

Lorsque l'on désire mesurer des températures de composants électroniques, une sonde de type K, dont certains multimètres sont équipés, n'est pas toujours adaptée.

Une mesure sans contact, par infrarouge, est souvent préférable. On trouve des modèles à partir de 20€ :

6. Data logging

Certains multimètres offrent une possibilité de connexion à un PC, ce qui permet de visualiser les mesures sous forme graphique, et de les enregistrer.

Exemple : UNI-T 61E :

https://lygte-info.dk/review/DMMUNI-T%20UT61E%20UK.html

Il ne faut pas s'attendre à pouvoir mesurer des tensions ou des courants fluctuant rapidement à l'aide de ce genre de multimètre, qui produira au maximum un échantillon ou deux par seconde.

7. Liens utiles

Quelques revues :

https://lygte-info.dk/info/indexDMMReviews%20UK.html 

https://www.markhennessy.co.uk/budget_multimeters/aneng_an8008.htm



Cordialement

Henri



Fer à Souder : recommandations


 

Fer à Souder : recommandations

 

Pour ceux qui désirent réaliser des projets aboutis et finalisés, un fer à souder est un outil indispensable. Il est utilisé pour différents usages :

  • assemblage de cartes électroniques
  • cosses à souder
  • bornes
  • étamage de fils
  • etc.

Tout d'abord, en matière d'électronique, on ne soude pas, on brase, car l’assemblage est fait à l’aide de métal d’apport de nature différente des pièces  assemblées, et le métal d’apport a une température de fusion inférieure aux pièces à assembler. Mais dans la vie courante de l'électronicien, on parle de soudure, donc nous allons adopter ce terme, même s'il est inexact.

1. Type de fer

Un fer à souder 230V comporte des risques pour les composants sensibles à l'électricité statique. Préférer les modèles avec prise 230V 2 pôles + terre.

Sinon, il est recommandé de relier la base de la panne à une prise de terre si l'on veut éviter les surprises. Le moyen de fixation à la base de la panne sera choisi en fonction des possibilités (soudure, pince crocodile, etc.). Le fil de terre pourra être fixé au câble secteur par du ruban adhésif pour ne pas trop handicaper le travail.

Pour souder des composants électroniques, il est préférable d'utiliser un fer d'environ 30 watts. Un fer de 50W à 80W sera nécessaire uniquement pour souder des cosses ou des bornes d'épaisseur importante.

Mieux : un fer de 50W à 80W à température réglable permettra d'adapter celle-ci au travail à effectuer.

Un support de fer est un accessoire indispensable si l'on veut éviter les accidents :


Certains sont équipés d'un accessoire de nettoyage de la panne.

Pour des travaux réguliers je recommande la station de soudage basse tension anti-ESD :

Weller WS51 80W

Celle-ci est relativement chère, mais on trouve d'excellents modèles à moins de 50€.

Il est préférable de choisir un modèle pour lequel on pourra trouver des pannes de rechange, car une panne s'use.

2. La panne

De préférence, choisir un modèle de fer avec au minimum une panne fine, ou un jeu de pannes interchangeables :

La pointe de celles-ci (pannes dites longue durée) est traitée anti-corrosion, ce qui est indispensable si l'on veut que la soudure adhère à la panne, et éviter les crises de nerfs.

3. Le fil de soudure

Pour les travaux courants, utiliser un fil de soudure 0.5mm. Le 0.25mm sera utile seulement si l'on désire assembler des cartes avec des composants de surface (CMS).

La soudure sans plomb est obligatoire dans l'industrie (directive RoHS), sauf pour du prototypage, car le plomb est toxique. Mais elle est difficile à utiliser pour un amateur, elle réclame une température plus élevée, et l'absence de plomb rend la soudure agressive pour la panne.

La soudure 60%/40% étain plomb (SnPb) vous évitera bien des désagréments.

La soudure à l'argent (62% Sn + 36% Pb + 2% Ag.) est un must :

https://www.gotronic.fr/art-soudure-a-l-argent-eso14-7440.htm

Pour des travaux de longue durée, un petit ventilateur permettra de ne pas respirer les fumées toxiques. Aérer la pièce si possible.

4. La température

En général il est préférable d'adopter une température élevée (350°) afin de réduire le temps de soudure. Une température basse allongera le temps de soudure, ce qui peut être néfaste pour certains composants sensibles.

La soudure de composants épais (cosses, bornes, etc.) se fera à température maximale.

5. Nettoyage

On ne nettoie pas une panne longue durée avec un objet abrasif (papier de verre, grattoir, etc.). Cela endommagerait la couche protectrice, de très faible épaisseur.

Avant soudure, nettoyer la panne chaude sur une petite éponge légèrement humide :

Ou mieux, une boule de paille de laiton :

Par contre, avant d'éteindre le fer, ne nettoyez pas la panne. La soudure présente sur la pointe la préservera et allongera sa durée de vie.

5. Soudure de composants traversants

On appelle composants traversants ceux dont les pattes sont glissées à travers les trous de la carte, et soudés par dessous.

Quand cela est nécessaire, on plie les pattes de composants à l'aide d'une pince à becs fins ou d'un gabarit de pliage :

Pour des raisons de facilité, on commence toujours par souder les composants de faible hauteur, souvent les résistances, en terminant par les gros composants, relais par exemple.

On peut s'aider d'un support pivotant :

Après insertion, on peut plier légèrement les pattes des composants qui le permettent (résistances, condensateurs), afin qu'ils ne tombent pas lorsque l'on retourne la carte pour effectuer les soudures :

Après soudure, couper les pattes au raz de la soudure à l'aide d'une pince coupante.

Dernière recommandation : on ne soude pas une résistance de puissance au ras de la carte. Prévoir un espace entre le corps de la résistance et la carte, afin qu'elle puisse dissiper la chaleur plus efficacement :

6. Soudure CMS

La soudure de composants de surface CMS est tout à fait à la portée de l'amateur. Je vous renvoie à cet article :

https://riton-duino.blogspot.com/2019/07/soudure-dun-microcontroleur-cms.html

7. Liens utiles

https://www.framboise314.fr/comment-bien-souder-un-tutoriel-sur-la-soudure


Cordialement

Henri


dimanche 19 avril 2020

La référence de tension MAX6225, MAX6241 & MAX6250



La référence de tension MAX6225

MAX6241 & MAX6250

J'ai reçu il y a peu un petit circuit fort intéressant : une référence de tension 5V MAX6250.

Sa datasheet se trouve ici :
https://datasheets.maximintegrated.com/en/ds/MAX6225-MAX6250.pdf

Il s'agit d'une référence de tension ayant une grande précision :
  • MAX6225A : 0.04%
  • MAX6241A : 0.04%
  • MAX6250A : 0.02%
Sa stabilité en température est de :
  • MAX6225A : 2ppm
  • MAX6241A : 2ppm
  • MAX6250A : 1ppm
1ppm /°C = 1 partie par million par °C
Ce circuit existe en 3 versions :
  • MAX6225A : 2.5V
  • MAX6241A : 4.096V
  • MAX6250A : 5V
La datasheet présente différents modèles ayant une précision et un coefficient de température plus ou moins élevé.
Il existe des versions CMS et DIP.

Une version plus récente (MAX6325, MAX6341 & MAX6350) :

https://datasheets.maximintegrated.com/en/ds/MAX6325-MAX6350.pdf

1. Utilisation

L'utilisation est très simple :

Si l'on désire utiliser ce composant en tant que référence de tension pour un ARDUINO, il faudra relier la sortie à l'entrée AREF du microcontrôleur :

Ensuite dans le code  de la fonction setup() on écrira :

analogReference(EXTERNAL);

Remarque : une carte ARDUINO PRO MINI ne possède pas de broche VREF.

2. Résultats

Je l'ai alimenté en 12V et le résultat est très éloquent :

C'est l'occasion de vérifier que le multimètre ANENG AN870 (20000 points) tient ses promesses, malgré son prix de vente de 20 ou 30€.

Il a été acheté en juillet 2018 ici : https://fr.aliexpress.com/item/32855502736.html?spm=a2g0s.9042311.0.0.27426c379JWQi9

Le VoltCraft VC870 (40000 points acheté 100€ en 2012 chez Conrad) que je possède également affiche 4.992V.

Cette petite différence est tout à fait excusable étant donné son âge vénérable.

Cela nous confirme également qu'un multimètre a besoin d'être étalonné  régulièrement si l'on veut conserver sa précision.

Ce MAX62XX est bien entendu utilisable en tant que référence de tension externe pour un convertisseur ADC, ou dans toute application exigeante de comparaison de tension.

Il offre peu d'intérêt en tant que référence de tension pour un ARDUINO étant donné que l'ADC de l'ATMEGA328P n’échantillonne que sur 10 bits (1023 points), mais il offrira tout de même quelques avantages de taille par rapport à la référence interne 1.1V :

  • une précision de 0.02% au lieu de 10%
  • stabilité en température de 1ppm
  • stabilité en fonction de la tension d'alimentation

Pour info voici les courbes de variation de la référence interne d'un ATMEGA328P en fonction de la tension d'alimentation et de la température :

Ce circuit est donc intéressant pour faire des mesures de tension dans des conditions de température variables, et sans étalonnage.

Avec un convertisseur 12 bits minimum il sera parfaitement à l'aise.

Pour information on trouve aussi des références de tension ayant une précision de 1mV, comme le AD588 d'ANALOG DEVICES.

Pour une application moins exigeante on pourra se tourner vers un TL431 (1% de précision), couramment utilisé dans les alimentation à découpage de PC par exemple, ou un LM4040 (0.1%).

Voici la page de sélection de MAXIM :

https://para.maximintegrated.com/search.mvp?fam=volt_ref&tree=master


Cordialement
Henri

mercredi 12 février 2020

Un HUB 4 ports série


J'ai récemment publié un article  à propos des convertisseurs USB /série.
https://riton-duino.blogspot.com/2020/02/les-convertisseurs-usb-serie.html

Celui-ci m'a donné une idée. Ayant quelques mini-modules FT4232H dans mes tiroirs j'ai décidé d'en tirer parti et de me fabriquer une carte HUB 4 ports série.

En effet je travaille souvent sur des projets embarquant des cartes ARDUINO PRO MINI et il m'arrive parfois d'avoir besoin d'au moins deux ports (1  projet avec un émetteur et un récepteur radio par exemple).

Une autre application est envisagée :
Actuellement sur mon serveur DOMOTICZ (RASPBERRY PI) les 4 ports USB sont occupés :
  • 1 ARDUINO MEGA (passerelle RFLINK)
  • 1 ARDUINO NANO (télécommande infrarouge)
  • 1 ARDUINO NANO (passerelle NRF24L01)
  • un PRO MINI + convertisseur FT232R (passerelle RFM69)
Si je remplace les deux NANO par deux PRO MINI 8MHz il sera possible d'utiliser à la place de trois convertisseurs FT232R un seul FT4232H, ce qui libérera 2 ports USB.
Si je réserve un port du FT4232H en tant que port série 5V, je pourrai également y connecter la MEGA, et cela libérera 3 ports USB.

Le but est donc de remplacer 2, 3 ou 4 convertisseurs USB / série par un seul, pourvu de 4 connecteurs le raccordement de 4 cartes :
  • GND
  • 3.3V ou 5V
  • TX
  • RX
  • DTR
La carte convertisseur sera donc équipée de 4 connecteurs à 5 broches.

Pour d'autre applications il est bien entendu possible d'ajouter d'autres broches de contrôle. Le FT4232H dispose de la panoplie complète (RTS, CTS, DTR, DSR, DCD, RING).

1. Les mini-modules

Avant tout examinons ce mini-module FT4232H de plus près :
  • le FT4232H est un convertisseur USB / série 4 ports
  • le FT2232 existe aussi. Il offre 2 ports
  • deux modes d'alimentation : 
    • alimentation par le connecteur USB
    • alimentation externe 5V
  • le driver est le même que pour les FT232R :
Si l'alimentation se fait pas le connecteur USB, le régulateur 3.3V embarqué AIC1733 peut délivrer 500mA.

La tension d'alimentation du chip FT4232H est de 3.3V (maxi 3.6V).
Ces convertisseurs sont donc adaptés à des processeurs alimentés sous 3.3V :
  • ARDUINO PRO MINI 8MHz 3.3V
  • ESP8266, ESP32
  • STM32
  • etc.
Il est possible cependant d'envisager de l'utiliser avec des processeurs 5V moyennant deux modifications :
  • amener le 5V sur le connecteur série 5 broches
  • insérer un pont diviseur entre la broche RX du connecteur 5 broches et la pin RX correspondante du FT4232H
Sur les 4 ports disponibles, il est possible de réserver 1 ou plusieurs ports 5V.

2. L'offre

Examinons l'offre disponible.

On trouve ces modules chez les revendeurs officiels Farnell, Mouser, RS, etc.
Mais il sont assez chers : 26€ à 27€.
Il existe des clones sur AliExpress pour une dizaine d'euros, ce qui est plus abordable :
Ce module est disponible également sur AliExpress :

Il a des possibilités intéressantes :
  • commutateur d'alimentation (USB ou JACK)
  • commutateur 5V / 3.3V sur RX / TX
  • 4 ports RX / TX / GND / VCC sur connecteurs JST
Le même en version FT2232 :

3. La réalisation

Ces modules seraient directement utilisables tels quels avec des fils DUPONT mais cela risque d'être très fastidieux. L'idée est d'implanter le mini-module sur une carte et de mettre à disposition 4 connecteurs à 5 broches :
  • GND
  • 3.3V ou 5V
  • TX
  • RX
  • DTR
Les broches sont dans le même ordre que le connecteur de chargement d'une PRO MINI, ce qui permettra de relier la carte à l'aide d'un câble à 5 fils droit.

Le brochage du module est le suivant :


Il y a deux connecteurs 26 broches nommés CN2 et CN3, et dans la datasheet du mini-module les broches sont répérées AD0 à AD7, BD0 à BD7, CD0 à CD7 et DD0 à DD7.
Nous avons donc 4 ports A B C D avec :
  • 0 : TX
  • 1 : RX
  • 2 : RTS
  • 3 : CTS
  • 4 : DTR
  • 5 : DSR
  • 6 : DCD
  • 7 : RING
Le brochage des clones sera assez semblable. La sérigraphie sera même plus claire, car ces module sont plus grands.
Sur la photo du clone ci-dessus il y a 4 bus : ADBUS, BDBUS, CDBUS, DDBUS, et pour chacun des broches numérotées de 0 à 7.

4. Le câblage

Voici le câblage à réaliser :

Liaison FT4232 Connecteurs série
GND CN2.2 CN2.4 CN2.6
CN3.2 CN3.4
A relier ensemble
A1 B1 C1 D1
VBUS 5V CN3-1 CN3-3 (voir remarque 1)
A relier ensemble
(voir remarque 2)
3.3V VIO CN2-1 CN2-3 CN2-5
CN2-11 CN2-21
CN3-12 CN3-22
A relier ensemble
A2 B2 C2 D2
(voir remarque 2)
AD0 (TX1) CN2-7A3
AD1 (RX1)CN2-10 A4
AD4 (DTR1) CN2-14 A5
BD0 (TX2) CN2-18 B3
BD1 (RX2) CN2-17 B4
BD4 (DTR2) CN2-22 B5
CD0 (TX3) CN3-26 C3
CD1 (RX3) CN3-25 C4
CD4 (DTR3) CN3-21 C5
DD0 (TX4) CN3-17 D4
DD1 (RX4) CN3-16 D5
DD4 (DTR4) CN3-13 D6

1) Dans cette configuration (broche CN3-1 reliée à CN3-3) l'alimentation 5V provient du connecteur USB.
Il est possible d'alimenter le mini-module avec une alimentation 5V externe si les 500mA d'un port USB ne suffisent pas.
Dans ce cas il faudra alimenter par la broche CN3-3 et laisser la broche CN3-1 non connectée.

2) dans le cas où l'on envisage de disposer d'un ou plusieurs ports 5V il faudra relier VBUS (CN3-1) à A1, B1, C1 ou D1. Un pont diviseur devra être inséré entre l'entrée RX A4, B4, C4, ou D4 et la broche RX correspondante du FT4232H.
Exemple :

Voici le schéma d'un hub muni de cavaliers permettant de choisir pour chaque port la tension de travail 3.3V ou 5V :


Par exemple si l'on désire faire travailler le port A en 3.3V les deux cavaliers JP1 et JP5 seront enfichés sur les pins 1 et 2, sinon sur les pins 2 et 3 .

5. Photos

Quelques photos pour illustrer :
Le dessus
 La broche +3.3V est repérée au vernis à ongle.

Le dessous.
A gauche le mini-module avec le connecteur CN3 à gauche. A droite les 4 connecteurs DUPONT mâles avec de gauche à droite : GND, VCC, TX (jaune), RX (orange), DTR (marron).


Chargement d'une PRO MINI
Comme on le voit j'ai utilisé une plaquette à pastilles 70mm x 50mm.
Le câblage est réalisé comme suit :
  • des fils rigides nus 0.25mm² pour les lignes GND et 3.3V, au cas où il y ait besoin d'un peu de puissance.
  • du fil à wrapper pour les lignes TX, RX et DTR
Astuce : les fils rigides sont récupérés dans un morceau de câble Ethernet. Il sont dénudés et soudés directement sur les pastilles.

Le câble de liaison avec la PRO MINI est constitué de 5 fils et de 2 boîtiers DUPONT 5 broches (GND, VCC, TX, RX, DTR).

Si l'on envisage de brancher plusieurs cartes dans le but de les faire communiquer par radio, comme avec le RFM69 sur la photo, il serait plus sage de fabriquer des câbles plus longs, 50cm minimum, car les émetteurs / récepteurs radio n'aiment pas trop la promiscuité.

Voici une version complète avec toutes les lignes UART (TX, RX, RTS, CTS, DTR, DSR, DCD, RING) :


Un régulateur 3.3V et un condensateur sont implantés sur la carte, car j'ai grillé celui du mini-module à cause d'un court-circuit entre 3.3V et GND.
Apparemment le régulateur AIC1733 du mini-module est protégé en température et court-circui, mais qu'en est-il vraiment ?
Méfiance donc ...

6. Le test

Après avoir relié la carte au PC par un cordon mini-USB, nous devons donc disposer de 4 ports série supplémentaires. Et c'est bien le cas :

riton@alpha:/mnt/sdc1/riton$ ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3  /dev/ttyUSB4


Sous Windows il faudra ouvrir le Gestionnaire de Périphériques, après avoir installé le driver FTDI : https://www.ftdichip.com/Drivers/VCP.htm

Branchons maintenant une carte PRO MINI 8MHz sur un des 4 connecteurs.

Le chargement par l'IDE ARDUINO se passe bien :

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "/tmp/arduino_build_496310/MotionSensor433MHz.ino.hex"
avrdude: writing flash (16074 bytes):

Writing | ################################################## | 100% 8.06s

avrdude: 16074 bytes of flash written
avrdude: verifying flash memory against /tmp/arduino_build_496310/MotionSensor433MHz.ino.hex:
avrdude: load data flash data from input file /tmp/arduino_build_496310/MotionSensor433MHz.ino.hex:
avrdude: input file /tmp/arduino_build_496310/MotionSensor433MHz.ino.hex contains 16074 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 6.05s

avrdude: verifying ...
avrdude: 16074 bytes of flash verified

avrdude done.  Thank you.


L'application chargée est un sketch pour un capteur de proximité MYSENSORS. Au démarrage le moniteur série doit afficher un tas d'informations à 115200 baud.
C'est bien le cas :
_  __       ____
|  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
| |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
| |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
|_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
        |___/                      2.3.2

16 MCO:BGN:INIT NODE,CP=RRNNA---,FQ=8,REL=255,VER=2.3.2
28 TSM:INIT
28 TSF:WUR:MS=0
32 TSM:INIT:TSP OK
34 TSF:SID:OK,ID=2
36 TSM:FPAR
40 ?TSF:MSG:SEND,2-2-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
335 TSF:MSG:READ,0-0-2,s=255,c=3,t=8,pt=1,l=1,sg=0:0
342 TSF:MSG:FPAR OK,ID=0,D=1
2050 TSM:FPAR:OK
2050 TSM:ID
2052 TSM:ID:OK
2054 TSM:UPL
2064 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
2084 TSF:MSG:READ,0-0-2,s=255,c=3,t=25,pt=1,l=1,sg=0:1
2091 TSF:MSG:PONG RECV,HP=1
2093 TSM:UPL:OK
2095 TSM:READY:ID=2,PAR=0,DIS=1
2123 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
2140 TSF:MSG:READ,0-0-2,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
2359 TSF:MSG:SEND,2-2-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2
2435 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
4454 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=11,pt=0,l=13,sg=0,ft=0,st=OK:Motion Sensor
4470 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.0
4501 TSF:MSG:SEND,2-2-0-0,s=1,c=0,t=1,pt=0,l=0,sg=0,ft=0,st=OK:
4507 MCO:REG:REQ
4524 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
4540 TSF:MSG:READ,0-0-2,s=255,c=3,t=27,pt=1,l=1,sg=0:1
4546 MCO:PIM:NODE REG=1
4550 MCO:BGN:STP
4552 MCO:BGN:INIT OK,TSP=1
0


J'ai fais le même test sur les quatre ports : tous OK.

7. PYTHON

On peut contrôler un FT4232 en bitbang. Voir l'article précédent :
https://riton-duino.blogspot.com/2020/02/les-convertisseurs-usb-serie.html#python

8. Conclusion

Voici donc un petit HUB à 4 ports série parfaitement fonctionnel, qui occupera donc seulement un port USB du PC.


Cordialement
Henri

9. Mises à jour
03/03/2020 : 7. PYTHON

lundi 10 février 2020

Les convertisseurs USB / série



Les convertisseurs USB / série


Lorsque l'on travaille avec des cartes ARDUINO PRO MINI ou des modules ESP8266 ou ESP32 dépourvus de convertisseur USB, on utilise généralement un convertisseur externe pour charger son application.

Tous les convertisseurs peuvent convenir, à partir du moment où l'on respecte bien la tension d'alimentation et la tension maximale des signaux que la carte peut supporter.

Pendant la phase de maquettage, il peut être pratique d'alimenter le montage complet à partir du convertisseur. Ceux-ci sont en général capables de fournir le courant nécessaire pour une carte PRO MINI et quelques modules peu consommateurs.

S'il s'agit d'une PRO MINI 16MHz, un convertisseur 5V est nécessaire. Une carte 16MHz ne tournerait pas sous 3.3V.

S'il s'agit d'une PRO MINI 8MHz 3.3V, on peut le faire avec un convertisseur 5V ou 3.3V.
Si des modules ne supportant pas 5V (NRF24L01 par exemple) sont connectés à l'ARDUINO, un convertisseur 3.3V est obligatoire.

Un ESP8266 ou ESP32 devra obligatoirement être chargé avec un convertisseur 3.3V, mais une alimentation délivrant au moins 500mA sera nécessaire.

Il faut bien distinguer tension d'alimentation et tension des signaux. En effet certains convertisseurs fournissant des signaux 3.3V ne fournissent pas forcément une tension d'alimentation de 3.3V (câble TTL-232R-3V3 par exemple).

Dans tous les cas, le câblage est le même :
  • GND du convertisseur sur GND de la carte
  • TX du convertisseur sur RX de la carte
  • RX du convertisseur sur TX de la carte
  • RTS ou DTR sur le DTR ou GRN de la carte (PRO MINI).
Dans certains cas la puissance fournie sur la broche 3.3V du convertisseur peut ne pas être suffisante (ESP8266 ou ESP32 par exemple). Il faudra donc alimenter le montage à l'aide d'une alimentation adaptée.

Nous allons examiner quelques modèles de convertisseurs.

Ensuite quelques paragraphes décrivent en détail certaines différences en fonction de l'OS utilisé (Linux, Windows).

1. Les convertisseurs 

Il faut prendre garde lors de l'achat de modules à la présence ou l'absence de broches telles que DTR ou RTS qui permettent le chargement automatique d'une carte ARDUINO PRO MINI. En effet bien que les chips proposent un certain nombre de lignes de contrôle, les modules convertisseurs ne les rendent pas forcément disponibles sur les connecteurs du module.

Sur une carte ARDUINO PRO MINI, la ligne DTR ou RTS du convertisseur doit être connectée sur la broche DTR ou GRN de la carte. En fait comme on le voit sur le schéma cette broche est reliée au RESET du microcontrôleur.
Si l'on utilise un convertisseur sans ligne DTR ni RTS, on peut appuyer sur le bouton RESET juste avant que le chargement ne commence.

Si l'on doit charger un ESP32 avec deux boutons EN et BOOT, RX et TX suffisent.

1.1. Le CH340 ou CH341

Ce chip est très commun. Il équipe souvent les cartes ARDUINO chinoises UNO, NANO, MEGA. Il a les caractéristiques suivantes :
  • interface : USB2
  • vitesse (baud) : 50bps à 2Mbps
  • tension 5V ou 3.3V
  • broche de sortie 3.3V
  • EEPROM interne (CH340B uniquement)
  • EEPROM externe (CH341)
On peut voir que seul le CH340B possède une EEPROM, bien pratique pour le stockage d'informations, le N° de série principalement.
Les autres modèles n'en possèdent pas, cela risque d'être handicapant. Nous verrons pourquoi au paragraphe 3. L'attribution des ports.

Le CH340 est disponibles sous forme de module :
CH340 5V / 3.3V
Ce modèle fournit une alimentation et des signaux 5V ou 3.3V en fonction de la position d'un cavalier.

En général ces modules ne proposent que les lignes RX et TX. Les lignes DTR ou RTS, bien pratiques pour charger une PRO MINI en automatique, sans appuyer sur le bouton RESET.

La plupart des modules sont équipé d'un CH340G. Je ne connais pas de module équipé d'un CH340B.

1.2. Le FT232R

Ce chip de la société FTDI a les caractéristiques suivantes :
  • USB2
  • vitesse (baud) : 300bps à 3Mbps
  • tension 5V ou 3.3V
  • broche de sortie 3.3V
  • EEPROM interne
  • tampon de réception et émission : 128 bytes et 256 bytes

La présence de deux tampons mémoire le rend plus performant dans les vitesses de transmission hautes.

Les modules sont très nombreux :



FT232R 5V / 3.3V


FT232R 5V / 3.3V

Ces deux modèle fournissent une alimentation et des signaux 5V ou 3.3V en fonction de la position d'un cavalier.
D'autres modèles proposent un interrupteur à bascule.

Je trouve le modèle rouge assez peu fiable. Les chargements échouent assez fréquemment.

En général ces modules proposent au moins une ligne DTR ou RTS.

Il est intéressant de fabriquer un câble directement enfichable sur la carte cible. Le câblage est dépendant du modèle de convertisseur utilisé :

Convertisseur avec connecteur enfichable sur ARDUINO PRO MINI


Câble FTDI TTL-232R
Ce câble existe aussi en version 3.3V : TTL-232R-3V3.

ATTENTION : la tension fournie par le fil VCC rouge est de 5V !
C'est indiqué dans la datasheet.

1.3. Le FT2232H et FT4232H

Pour les applications gourmandes FTDI propose également des convertisseurs à 2 et 4 ports.

Ils sont également disponibles sous forme de modules :
Les datasheets :
https://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf
https://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT4232H_Mini_Module.pdf

Une application JTAG :
http://www.avi-plus.com/images/fbfiles/files/HOWTO_JTAG_Interface_STMCLT_Clone_REV2.pdf

Une application personnelle (HUB 4 ports série) :
https://riton-duino.blogspot.com/2020/02/un-hub-4-ports-serie.html

On trouve également des modules chinois sur AliExpress :

FT4232 4 ports


FT4232 4 ports

Il a des possibilités intéressantes :
  • commutateur d'alimentation (USB ou JACK)
  • commutateur 5V / 3.3V sur RX / TX
  • 4 ports RX / TX / GND / VCC sur connecteurs JST
Le même en version FT2232 :
FT2232 2 ports

1.4. Le PL2303

Ce chip de la société PROLIFIC a les caractéristiques suivantes :
  • USB2
  • vitesse (baud) : 75bps à 12Mbps
  • tension 5V ou 3.3V
  • broche de sortie 3.3V
  • EEPROM interne
  • tampon de réception et émission : 128 bytes et 256 bytes
La présence de deux tampons mémoire le rend plus performant dans les vitesses de transmission hautes.

Les modules sont aussi très nombreux :
PL2303 5V / 3.3V
Ce modèle fournit une alimentation et des signaux 5V ou 3.3V en fonction de la position d'un cavalier.

Comme les modules CH340, en général ces modules ne proposent que les lignes RX et TX, pas de DTR ou RTS, bien pratiques pour charger une PRO MINI en automatique, sans appuyer sur le bouton RESET.

1.5. Le CP2102 ou CP2104

Ce chip de la société Silicon Labs a les caractéristiques suivantes :
  • USB2
  • vitesse (baud) : jusqu'à 921600Mbps
  • tension 5V ou 3.3V
  • broche de sortie 3.3V
  • EEPROM interne
  • tampon de réception et émission : 576 bytes et 640 bytes
La présence de deux tampons mémoire le rend plus performant dans les vitesses de transmission hautes.

Les modules sont aussi très nombreux :
CP2102 5V / 3.3V
Ce modèle fournit une alimentation et des signaux 5V ou 3.3V en fonction de la position d'un cavalier.

Apparemment si les FT232R avec commutateur 5V / 3.3V sont très répandus, il n'en va pas de même pour le CP2102 ou CP2104.
La majorité propose deux broches 5V et 3.3V mais qu'en est-il de la tension des signaux ? Cela demande à être approfondi.

En général ces modules proposent au moins une ligne DTR ou RTS.

2. Les drivers

Sous Windows il faudra les installer :
CH340 : http://www.wch.cn/download/CH341SER_EXE.html
FT232R : https://www.ftdichip.com/Drivers/VCP.htm
PL2303 : http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41
CP2102 & CP2104 : https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Attention : il semblerait que certaines versions de PL2303 (PL-2303HXA et PL-2303X) ne soient pas compatibles avec Windows 8 et 10.
Voir la page de téléchargement.

Sous Linux il n'y a rien à faire. Les drivers font partie de la distribution et sont directement utilisables.

3. L'attribution des ports

Lorsque l'on branche un convertisseur ou une carte UNO ou NANO sur un PC, le comportement diffère en fonction de l'OS.

3.1. Windows

Windows attribue un port COMX en fonction du driver et surtout du chip convertisseur utilisé.

Avec un FT232R ou un PL2303 le port de COM attribué sera différent pour chaque convertisseur, et en rebranchant un convertisseur précédemment utilisé celui-ci retrouvera le même port de COM que lors de sa précédente utilisation.

Ceci explique que sur certains postes de développeurs on peut avoir sous Windows 50 ports de COM déjà attribués.

Avec un CH340 Windows attribuera le premier port de COM libre lors du premier branchement. Ensuite ce port sera réutilisé, s'il est libre, pour tous les convertisseurs CH340.
Il est donc impossible de distinguer un CH340 d'un autre CH340 par son port de COM.

Ceci explique que si l'on branche une UNO sur un PC, qu'on la débranche et qu'on en branche une autre, elle se voit attribuer le même port.

Oui mais pourquoi ? tout simplement parce que le CH340 ne possède pas de mémoire EEPROM pour y stocker un numéro de série.

Un FT232R ou un PL2303 possède une EEPROM et un numéro de série y est inscrit à la fabrication.
Celui-ci est même modifiable par l'utilisateur. Chez FTDI par exemple :
FT_PROG EEPROM Programming Utility

Il est possible sous Windows de changer un numéro de port à l'aide du Gestionnaire de Périphériques :
https://plugable.com/2011/07/04/how-to-change-the-com-port-for-a-usb-serial-adapter-on-windows-7/

Encore une fois cette modification, si le convertisseur est un CH340, s'appliquera à tous les CH340.

3.2. Linux

Linux attribue le premier port TTY libre en partant de ttyUSB0 (ttyACM0 pour certaines cartes, MEGA officielle par exemple).

Si on débranche un convertisseur pour en rebrancher un autre, le même port sera attribué de nouveau.
Si on a laissé un logiciel terminal connecté au port TTY précédent, le port suivant sera attribué.

On pourrait être tenté de dire : Linux c'est le bazar !
Non, la gestion est plus simple et plus fiable.

Sous Linux il est possible également de modifier le nom d'un port TTY USB et de le rendre persistant. Il sera nécessaire de passer par udev :

Pour mon exemple concret sur RASPBERRY PI j'ai choisi un port USB sur lequel est branchée une carte PRO MINI avec un émetteur / récepteur 433MHz. Le convertisseur est un FT232R.
Normalement, au boot, le device ttyUSB2 lui est attibué. Je désire ajouter un device ttyUSB433, car je sais que DOMOTICS ne me proposera que des devices commençant par ttyUSB, ttyACM ou ttyAMA.

La commande lsusb permet de lister les ports USB. Ici je recherche un FT232 :

$ lsusb | grep FT232
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC


On voit ici l'identifiant constructeur (0403) et identifiant produit (6001).

Ensuite il faut connaître le port TTY l'aide de la commande dmesg. Si le convertisseur vient d'être branché on verra plus facilement ses informations.
Sinon il faudra les rechercher le mot FT232 dans la console avec CTRL-SHIFT-F :

$ dmesg
...
[    3.562108] ftdi_sio 1-1.2:1.0: FTDI USB Serial Device converter detected
[    3.562271] usb 1-1.2: Detected FT232RL
[    3.563289] usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB2


Si plusieurs FT232R sont présents on pourra lever le doute en débranchant  et rebranchant celui que l'on désire modifier. Le informations se retrouveront en fin de liste.

On peut ensuite utiliser la commande udevadm pour avoir plus d'informations :

$  udevadm info -n /dev/ttyUSB2
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB2/tty/ttyUSB2
N: ttyUSB2
S: serial/by-id/usb-FTDI_FT232R_USB_UART_A104JP07-if00-port0
S: serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
S: ttyUSB433
E: DEVLINKS=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A104JP07-if00-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0 /dev/ttyUSB433
E: DEVNAME=/dev/ttyUSB2
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB2/tty/ttyUSB2
E: ID_BUS=usb
E: ID_MODEL=FT232R_USB_UART
E: ID_MODEL_ENC=FT232R\x20USB\x20UART
E: ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC
E: ID_MODEL_ID=6001
E: ID_PATH=platform-3f980000.usb-usb-0:1.2:1.0
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_2_1_0
E: ID_REVISION=0600
E: ID_SERIAL=FTDI_FT232R_USB_UART_A104JP07
E: ID_SERIAL_SHORT=A104JP07
E: ID_TYPE=generic
E: ID_USB_DRIVER=ftdi_sio
E: ID_USB_INTERFACES=:ffffff:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=FTDI
E: ID_VENDOR_ENC=FTDI
E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
E: ID_VENDOR_ID=0403
E: MAJOR=188
E: MINOR=2
E: SUBSYSTEM=tty
E: TAGS=:systemd:
E: USEC_INITIALIZED=49791


FT232R, 0403, 6001 : c'est bien le bon convertisseur.

Il faut relever :
  • l'identifiant constructeur : 0403
  • l'identifiant produit : 6001
  • le N° de série : AL008YL2
  • le port TTY : ttyUSB1
Ensuite il suffit de créer un fichier nommé 99-usb-serial.rules par exemple dans le répertoire /etc/udev/rules.d. Ce fichier doit être créé avec les droits administrateur (sudo).

/etc/udev/rules.d/99-usb-serial.rules : 
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A104JP07", SYMLINK+="ttyUSB433".

Il faut ensuite redémarrer udev :
On trouve beaucoup de commandes du genre :

$ sudo /etc/init.d/udev restart
$ udevadm control --reload-rules && udevadm trigger

Mais ces commandes n'ont pas l'air d'avoir le moindre effet.
Donc je redémarre :

$ sudo reboot

A chaque fois que le kernel verra un device TTY USB ayant ces identifiants et ce numéro de série il l'appellera ttyFT232-1.
Bien entendu il est possible d'ajouter autant de lignes que nécessaire pour différents convertisseurs.

Au redémarrage nous voyons note nouveau port TTY :

$ ls /dev/ttyU*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB433


On peut remarquer que le ttyUSB2 est toujours présent. ttyUSB433 est en fait un lien symbolique sur ttyUSB2 (un alias).

Ici aussi cette modification, si le convertisseur est un CH340, s'appliquera à tous les CH340 car on ne peut pas préciser de N° de série. Dommage.

L'avantage avec Linux est que l'on peut nommer le port TTY à sa convenance. Dans l'exemple je l'ai appelé ttyUSB433.

Ensuite comment distinguer physiquement plusieurs FT232R entre eux ? avec une étiquette, portant le même nom, collée sur le module par exemple.

4. L'attribution des ports au boot

Au démarrage d'une machine, si plusieurs convertisseurs ou plusieurs cartes ARDUINO sont déjà branchés, le N° des ports attribués vont dépendre bien sûr de l'OS et du type de convertisseur.

Cela concerne principalement les machines utilisées comme serveur domotique, avec plusieurs cartes ARDUINO branchées en permanence :
  • passerelle RFLINK
  • passerelle NRF24L01 ou RFM69
  • etc.
Ce sont souvent des machines à base de RASPBERRY PI, sous Linux, mais pas seulement. Windows 10 tourne aussi sur cette plateforme (RASPBERRY PI 4).

4.1. Windows

Sous Windows c'est facile : tous les convertisseurs retrouveront le petit nom qu'ils portaient précédemment.

Si plusieurs CH340 sont présents, il y aura incertitude, mais en général l'informatique est déterministe et normalement les N° de ports COM seront les même que précédemment, sauf peut être si l'on a interverti les ports USB de deux cartes, ou si la chance n'est pas de notre côté.

L'idéal est donc de n'avoir au maximum qu'un seul CH340 branché au démarrage sur un serveur si l'on veut pouvoir retrouver facilement leurs ports respectifs.
Les autres convertisseurs FT232R ou PL2303 se verront toujours attribuer le même port de COM.

4.2. Linux

Là encore les ports TTY attribués à chaque convertisseur a de fortes chances de rester le même, mais ce n'est pas garanti.
La bonne méthode est d'attribuer soi-même avec udev un petit nom reconnaissable comme vu plus haut (3.2. Linux).
Ici aussi si plusieurs CH340 sont présents, il y aura incertitude.

4.3. Exemple

Sur ma RAPBERRY PI qui héberge un serveur DOMOTICZ il y a quatre cartes ARDUINO branchées en USB :
  • une passerelle RFLINK (ARDUINO MEGA officielle)
  • une passerelle MYSENSORS 2.4GHz (ARDUINO NANO + CH340)
  • une passerelle MYSENSORS 433MHz (ARDUINO PRO MINI + FT232R)
  • un récepteur infrarouge (ARDUINO NANO + CH340)
Si je me contente de laisser telle quelle cette configuration il y aura incertitude sur les deux NANOs et la PRO MINI. En effet les trois ports seront nommés ttyUSB0, ttyUSB1 et ttyUSB2, un peu au hasard.

La MEGA porte le nom /dev/ttyACM0, car c'est une officielle. Si l'on avait affaire à une carte chinoise équipée d'un CH340 il y aurait une incertitude de plus.

Par chance la PRO MINI utilise un FT232R. On peut donc renommer son port série. Il a été renommé ttyUSB-433 à l'aide d'une règle udev.

En général cela se passe bien et les ports sont attribués comme suit :
  • récepteur infrarouge : /dev/ttyUSB0
  • passerelle RFLINK : /dev/ttyACM0
  • passerelle MYSENSORS 2.4GHz : /dev/ttyUSB1
  • passerelle MYSENSORS 433MHz : /dev/ttyUSB433
Il reste donc une incertitude entre ttyUSB0 et ttyUSB1 (deux NANOs CH340).

Comme je ne peux rien faire pour résoudre ce problème, à chaque redémarrage (ce n'est pas fréquent) si les ports des deux NANOS sont inversés, je débranche les deux, et je rebranche la carte "récepteur infrarouge" en premier, et la carte "passerelle MYSENSORS 2.4GHz" en second. Tout rentre dans l'ordre.
L'idéal serait de remplacer les deux NANOs par des PRO MINI et un FT232R dont le port série porterait un nom parlant : ttyUSB24 (pour 2.4GHz) ou ttyUSB38 (pour infrarouge 38 KHz) par exemple.

J'ai récemment développé un HUB 4 ports série :
https://riton-duino.blogspot.com/2020/02/un-hub-4-ports-serie.html
Bâti autour d'un FT4232H (quadruple FT232R), celui-ci me permettra de résoudre tous ces problèmes plus facilement, et accessoirement de libérer au moins deux ports USB.

5. Le bitbang

Qu'est ce que le bitbang ? c'est la possibilité qu'offrent certains convertisseurs de contrôler leurs broches par logiciel.
On peut ainsi les transformer en extension d'I/O pour PC, moyennant l'utilisation d'un driver approprié ou non.

FTDI propose D2XX :
https://www.ftdichip.com/Drivers/D2XX.htm
FTDI propose également libftdi et pylibftdi :
https://github.com/lipro/libftdi
https://pypi.org/project/pyftdi/
Une documentation : https://www.ftdichip.com/Support/Documents/AppNotes/AN_373 Bit-Bang Modes for the FT-X Series.pdf

Un exemple ici avec pyftdi :
https://riton-duino.blogspot.com/2020/02/un-hub-4-ports-serie.html#python 

Chez Silicon Labs : https://www.silabs.com/community/interface/knowledge-base.entry.html/2018/07/25/how_to_control_gpios-Wot7

Il est facile ensuite de contrôler les broches du convertisseur en PYTHON par exemple en utilisant la librairie libusb et le module pyusb.

5.1. PYTHON

Amusons-nous à piloter un FT4232H avec un script PYTHON.
Bien entendu on peut faire la même chose avec des modules FT232R ou FT2232H, et je l'ai d'ailleurs fait avec des modules chinois.

Pour cela il nous faut au préalable installer la librairie pylibftdi :

pip install pylibftdi

Ce script bitbang.py fait clignoter une LED (en série avec un résistance de 470Ω) branchée sur le port AD0 (TX1) d'un FT4232H ou la broche TX d'un FT232R :

import time
from pylibftdi import Driver
from pylibftdi import BitBangDevice

def get_ftdi_device_list():
    """
    return a list of lines, each a colon-separated
    vendor:product:serial summary of detected devices
    """
    dev_list = []
    for device in Driver().list_devices():
        # list_devices returns bytes rather than strings
        dev_info = map(lambda x: x.decode('latin1'), device)
        # device must always be this triple
        vendor, product, serial = dev_info
        dev_list.append((vendor, product, serial))
    return dev_list

def blink_device(dev):
    """
    blink PORT0 of device
    """
    with BitBangDevice(device_id=dev) as bb:
        bb.direction = 0x01
        print bb.port

        while True:
            bb.port = 0x01
            time.sleep(1)
            bb.port = 0x00
            time.sleep(1)

if __name__ == '__main__':
    cnt = 0
    devices = get_ftdi_device_list()
    for device in devices:
        print "%d %s" % (cnt, device)
        cnt += 1
    dev = int(raw_input("select device: "))
    print dev
    if dev <= cnt:
        print "blink_device", dev
        blink_device(devices[dev][2])


Le script demande d'abord avec quel convertisseur il doit travailler, après avoir affiché ceux qu'il a trouvé :

$ python bitbang.py
0 (u'FTDI', u'FT4232H MiniModule', u'FTWEQGJE')
1 (u'FTDI', u'FT4232H MiniModule', u'FTWEQY84')
select device: 1
blink_device 1


Il trouve deux mini-modules, ce qui est vrai. Je choisis ne N° 1 et après cela la LED branchée sur le port AD0 clignote !

Cette manipulation peut être intéressante à plus d'un titre :

On peut par exemple écrire sur les entrées et consulter l'état des sorties d'un ARDUINO, afin de réaliser des tests, au lieu de faire ça avec des boutons et des LEDs.

Sous Linux, il faudra accorder les doits d'écriture sur le device USB :

$ cat /etc/udev/rules.d/98-ftdi.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE:="0666" 
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE:="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0666"

Ce fichier de règles udev est OK pour FT2232H, FT4232H etFT232R (idProduct = 6010, 6011, 6001).

5.2. FT232 et I2C, SPI et autres

Une autre utilisation du bitbanging :
  • créer de toutes pièces un bus I2C ou SPI
  • générer un PWM
  • contrôler un PCF8574, un MCP23017, etc.
https://github.com/adafruit/Adafruit_Python_GPIO/tree/master/Adafruit_GPIO

Comme on le voit les possibilités sont nombreuses.

5.3. FT2232H et ESP32

Voici une dernière utilisation du bitbanging : un module FT2232H peut être utilisé pour réaliser une sonde JTAG pour ESP32. Il existe même un module ESP32-PROG spécialement conçu pour cette utilisation.
A tester ...

6. conclusion

J'espère avoir apporté des réponses à quelques questions que vous vous posiez peut-être à propos des convertisseurs USB.


Cordialement
Henri